iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Cloud Native

AWS AI交易室實戰系列 第 29

Day 29 - Solace PubSub+ On ECS

  • 分享至 

  • xImage
  •  

~ 開放的軟體思維 ~
solace protocols

今天我們來談談實作演算法後在AWS要做哪些事情

一般來說,一套可以商用的系統,是穩定快速容錯的,大多數商業級的架構都會需要一個絕對的核心資訊交換系統去協調所有工作的運作,Cloud Native 也不例外,Lambda 可能連接 RDS 做共同的資料交換,也有可能與 SQS 、SNS 整合為了不同目的與功能,微服務小而美的背後會有一個強大的資料交換中心支援,才有辦法支撐起商業級的運用,這邊對於交易系統的核心,因為對於低延遲的需求,可以選擇 Solace 作為建構系統的支柱。

什麼是 Solace ?

官網:https://solace.com/

Solace PubSub+ 平台是一個完整的事件流和管理平台,專為實時企業設計。該平台幫助企業在混合雲、多雲和物聯網環境中設計、部署和管理事件驅動架構(Event Driven Architecture,EDA),使企業能夠更加整合和事件驅動。

軟體架構的演進到現今微服務架構在 EDA 之上已經成為設計系統的首選,除了 Web API 的本質上仍有很大一部分保有 request - reply 的服務模型,現今採用 EDA & Streaming 的架構無疑就是追求極致效能與速度的康莊大道,對交易平台來說,訊息的處理量瓶頸會在 Market Data 上,我們希望得到更多樣化的市場數據,但又不希望影響到延遲,採用數據訊息路由傳輸平台是必須的,Solace 這家公司就是解決這類的問題而存在。

部署 Solace PubSub+ 到 ECS

注意:ECS 可能會需要少許費用,用完要關閉

Solace 把他們的服務軟體化後再 Dockerize 到 docker hub 上,我們都可以從上面把他 docker pull 下來玩玩
下面是官網預設的 docker run 指令()

# pull image only
$ docker pull solace/solace-pubsub-standard

# run it directly
$ docker run -d -p 8080:8080 \
-p 55554:55555 \
-p 8008:8008 \
-p 1883:1883 \
-p 8000:8000 \
-p 5672:5672 \
-p 9000:9000 \
-p 2222:2222 \
--shm-size=2g \
--env username_admin_globalaccesslevel=admin \
--env username_admin_password=admin \
--name=solace solace/solace-pubsub-standard

接著我們可以把他 push 到 AWS ECR 上,

# check use the correct account
$ aws iam get-user

$ aws ecr get-login-password \
--region ap-northeast-1 | docker login --username AWS \
--password-stdin <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com

# 建立一個新的 repository
$ aws ecr create-repository \
--repository-name solace-image \
--image-scanning-configuration scanOnPush=true \
--image-tag-mutability MUTABLE

$ docker tag solace/solace-pubsub-standard:latest \
<account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/solace-image:latest

$ docker push <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/solace-image:latest

接著打開 ECS 介面,建立一個 cluster ,或是使用指令建立:

$ aws ecr create-repository \
--repository-name solace-image-repository \
--image-scanning-configuration scanOnPush=true \
--image-tag-mutability MUTABLE

接著啟動服務會需要先建立 task definition

Task definition family:solace-task-definition

Launch type:AWS Fargate

Task Size:CPU - 2vCPU,Memory - 8GB

(Solace 最小系統需求:2 CPU cores Memory::2GB,可以吃100條連線 )

Container - 1 ImageUri 請填入上面 ECR 新建立的 repository ImageUrl

create new task definition - 1
create new task definition - 2
ecsTaskExecutionRole 的 policy 如下:
execution role policy - 1

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
    
    "Resource": "*"
        }
    ]
}

port mapping & environment variables 如下:
create new task definition - 2

接著就可以建立一個服務,設定如下:
create new service - 1
create new service - 1

這裡我們先設定 Security Group Allow All TCP from Anywhere,測通之後再限縮 Source 為其他 AWS Services’ Security Group
create new service - 3

開起來後長這樣:
solace service

會需要開起來的 public ip 測試
solace service - configuration

在瀏覽器網址列打上: http://{public ip}:8080 會看到 solace login page
solace - login page

如果要關閉可以設定 Desired tasks = 0
solace - shutdown

如果您有對於巨量數據串流處理有強烈的學習動機,Solace 也是個很好的上手教材
Solace Documentation
所有的 api 都是 open source 在 github 上
https://github.com/SolaceProducts
https://github.com/SolaceSamples

忙碌的 30 天,似乎不足以將一套完整架構交易系統說明完整

目前尚待完成的工作如下,也給自己留個紀錄

  • 整合 永豐 API ↔ Solace ↔ SageMaker Endpoint 完成真正自動化程式交易
  • 下單資料存進 AWS DynamoDB

參考資料:

https://solace.com/


上一篇
Day 28 - 演算法交易 - 回溯測試
下一篇
Day 30 - 機器學習開發流程
系列文
AWS AI交易室實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言